const express = require('express');

const app = express();

app.listen(3000, () => console.log('express服务器启动'));

const cors = require('cors');
app.use(cors());


//加载express-jwt(实现身份认证,解析token)
const jwt = require('express-jwt');
// app.use(jwt({ secret: 'shhhhhhared-secret'}).unless({path: ['/token']}));

//jwt()-解析token,把token保存的用户的id赋值给 req.user ,如果发现token假的或者过期则会next(err)跳转到错误信息
// unless() - 完成身份认证，除了指定的接口之外，其他接口都需要身份认证
app.use(jwt({
  algorithms: ['HS256'], // 加密的时候使用的什么算法，这里解密就需要指定什么算法
  secret: 'shhhhh' // 加密 token 时使用的那个字符串 
}).unless({
  path: ['/api/login', '/api/reguser'] // 除了这两个接口之外，其他接口都需要认证
}));

//配置,接受POST的请求的请求体(参数)  查询字符串
app.use(express.urlencoded({ extended: true }));

// 加载自定义的路由模块，注册中间件
let loginRouter = require('./routers/login');
//注册中间件
//用户路由模块
app.use('/api', loginRouter);

//个人中心路由模块
app.use('/my/user', require('./routers/user'))
//分类管理路由模块
app.use('/my/category/',require('./routers/category'));
//文章管理路由模块
app.use('/my/article', require('./routers/article'));


// 最后，加一个错误处理中间件，处理token解析的错误
// express-jwt 模块的说明文档中
app.use((err, req, res, next) => {
  if (err.name === 'UnauthorizedError') {
    res.status(401).send({ status: 1, message: '身份认证失败' });
  }
});
